local v0 = AceLibrary("Gratuity-2.0"); local v1 = 0; local v2, v3 = false, 0; local v4, v5 = true, 0; local v6, v7 = false, 0; local v8 = false; local v9 = {}; local v10 = {}; local v11 = {}; local v12; local v13 = {}; local v14 = {}; local v15 = {}; local function v16(v151) if (v151 == nil) then return nil; end local v152, v153 = string.find(v151, "^%s*"); local v154 = string.find(v151, "%s*$", v153 + 1); return string.sub(v151, v153 + 1, v154 - 1); end local function v17(v155, v156, v157) local v158, v159 = {}, 1; repeat local v827, v828 = string.find(v155, v156, v159); if (v827 == nil) then local v1036 = string.sub(v155, v159); table.insert(v158, (v157 and v16(v1036)) or v1036); return v158; end if (v827 > 1) then local v1037 = string.sub(v155, v159, v827 - 1); table.insert(v158, (v157 and v16(v1037)) or v1037); else table.insert(v158, ""); end v159 = v828 + 1; until false end local function v18(v160, v161) if string.find(v161, ">") then local v968 = tonumber(v17(v161, ">")[2]); return v160 > v968; elseif string.find(v161, "<") then local v1086 = tonumber(v17(v161, "<")[2]); return v160 < v1086; else return v160 == tonumber(v161); end end local function v19(v162) local v163 = 1; while UnitBuff("player", v163) do local v829 = UnitBuff("player", v163); if (v829 and (v829 == ([[Interface\Icons\]] .. v162))) then return true; end v163 = v163 + 1; end return false; end local function v20(v164) for v830 in v164 do local v831 = GetComboPoints("target"); if v18(v831, v830) then return true; end end return false; end local function v21(v165, v166) for v832 in v166 do local v833, v834; if MobHealthFrame then v833, v834 = MobHealth3:GetUnitHealth(v165, UnitHealth(v165), UnitHealthMax(v165)); else v833, v834 = UnitHealth(v165), UnitHealthMax(v165); end local v835 = (100 / v834) * v833; if v18(v835, v832) then return true; end end return false; end local function v22(v167, v168) for v836 in v168 do local v837, v838; if MobHealthFrame then v837, v838 = MobHealth3:GetUnitHealth(v167, UnitHealth(v167), UnitHealthMax(v167)); else v837, v838 = UnitHealth(v167), UnitHealthMax(v167); end local v839 = v838 - v837; if v18(v839, v836) then return true; end end return false; end local function v23(v169, v170) for v840 in v170 do local v841 = (100 / UnitManaMax(v169)) * UnitMana(v169); if v18(v841, v840) then return true; end end return false; end local function v24(v171, v172) for v842 in v172 do local v843 = UnitManaMax(v171) - UnitMana(v171); if v18(v843, v842) then return true; end end return false; end local function v25(v173) local v174 = function(v844) local v845 = 1; while true do local v969, v970 = GetSpellName(v845, v844); if not v969 then break; end if (v969 == v173) then local v1087, v1088 = GetSpellCooldown(v845, v844); local v1089 = v1088 - (GetTime() - v1087); return v1089; end v845 = v845 + 1; end return nil; end; local v175 = v174(BOOKTYPE_PET); if not v175 then v175 = v174(BOOKTYPE_SPELL); end return v175; end local function v26(v176) for v846 = 0, 19 do local v847 = v0:SetInventoryItem("player", v846); if v847 then local v1038 = v0:GetLine(1); if (v1038 == v176) then local v1118, v1119 = GetInventoryItemCooldown("player", v846); local v1120 = v1119 - (GetTime() - v1118); return v1120; end end end return nil; end local function v27(v177) for v848 = 0, 4 do for v971 = 1, GetContainerNumSlots(v848) do v0:SetBagItem(v848, v971); local v972 = v0:GetLine(1); if (v972 == v177) then local v1090, v1091 = GetContainerItemCooldown(v848, v971); local v1092 = v1091 - (GetTime() - v1090); return v1092; end end end return nil; end local function v28(v178) for v849 in v178 do local v850, v851, v852 = string.match(v849, "([^%s]*)([<?>?])(%d+%.?%d*)"); if not v851 then v850 = string.match(v849, "([^%s]*)"); end local v853 = v25(v850); if not v853 then v853 = v26(v850); end if not v853 then v853 = v27(v850); end if v853 then v853 = tonumber(string.format("%0.1f", v853)); else return; end if (v851 and (v851 == ">")) then return v853 > tonumber(v852); elseif (v851 and (v851 == "<")) then return v853 < tonumber(v852); else return v853 > 1.5; end end end local function v29(v179) if IsAddOnLoaded("AttackTimer") then for v1039 in v179 do local v1040 = (AttackTimerBarText and tonumber(string.match(AttackTimerBarText:GetText(), "%d+%.?%d*"))) or 0; if v18(v1040, v1039) then return true; end end else print("未加载攻击间隔计时条插件(AttackTimer"); end end local function v30(v180) if IsAddOnLoaded("AttackTimer") then for v1041 in v180 do local v1042 = AttackTimer['Remainder']; if v18(v1042, v1041) then return true; end end else print("未加载攻击间隔计时条插件(AttackTimer"); end end local function v31(v181) if IsAddOnLoaded("AttackTimer") then for v1043 in v181 do local v1044 = AttackTimer['PercentTime']; if v18(v1044, v1043) then return true; end end else print("未加载攻击间隔计时条插件(AttackTimer"); end end local function v32(v182) if IsAddOnLoaded("AttackTimer") then for v1045 in v182 do local v1046 = GetTime() - AttackTimer['LastTime']; if v18(v1046, v1045) then return true; end end else print("未加载攻击间隔计时条插件(AttackTimer"); end end local function v33(v183) for v854 in v183 do local v855 = UnitAttackSpeed("player"); if v18(v855, v854) then return true; end end end local function v34(v184) for v856 in v184 do local v857 = UnitRangedDamage("player"); if v18(v857, v856) then return true; end end end local function v35() for v858 = 1, GetNumShapeshiftForms() do local v859, v859, v860 = GetShapeshiftFormInfo(v858); if v860 then return v858; end end end local function v36(v185) local v185 = v35(v185); if (v185 ~= nil) then CastShapeshiftForm(v185); end end local function v37(v186) if (v186 == true) then return v35() ~= nil; else return v186[v35() or 0]; end end local function v38(v187) if (not v187 or GetActionText(v187)) then return; end v0:SetAction(v187); return v0:GetLine(1); end local function v39(v188) for v861 in v188 do for v973 = 1, 120 do local v974 = v38(v973); if (v974 == v861) then if (v861 == "压制") then if (v2 == true) then return true; end elseif IsUsableAction(v973) then return true; end end end end return false; end local function v40(v189) for v862 in v189 do for v975 = 1, 120 do local v976 = v38(v975); if (v976 == v862) then if IsCurrentAction(v975) then return true; elseif IsAutoRepeatAction(v975) then return true; end end end end return false; end local v41 = {}; local v42 = {}; local function v43() for v863 = 1, 120 do local v864 = v38(v863); if v864 then local v1047 = IsActionInRange(v863); if (v42[v864] ~= v1047) then v41[v864] = v1047; v42[v864] = v1047; end end end end local function v44(v190) for v865 in v190 do if ((v865 == "raid") or (v865 == "团队")) then return GetNumRaidMembers() > 0; elseif ((v865 == "party") or (v865 == "小队")) then return GetNumPartyMembers() > 0; end end end local v45 = "LeftButton"; local v46 = {}; for v191 = 1, 12 do table.insert(v46, _G["ActionButton" .. v191]); table.insert(v46, _G["MultiBarBottomLeftButton" .. v191]); table.insert(v46, _G["MultiBarBottomRightButton" .. v191]); table.insert(v46, _G["MultiBarRightButton" .. v191]); table.insert(v46, _G["MultiBarLeftButton" .. v191]); table.insert(v46, _G["MultiBarLeftButton" .. v191]); table.insert(v46, _G["BonusActionButton" .. v191]); end for v192, v193 in ipairs(v46) do v193:SetScript("OnMouseDown", function() if arg1 then v45 = arg1; end end); end local function v47(v194, v195) for v866 in v195 do local v867 = UnitClass(v194); if (v867 and string.find(v867, v866)) then return true; end end return false; end local function v48(v196, v197) for v868 in v197 do v868 = string.gsub(v868, "_", " "); local v869 = 1; while UnitBuff(v196, v869) do v0:SetUnitBuff(v196, v869); local v977 = v0:GetLine(1); if (v977 and string.find(v977, v868)) then return true; end v869 = v869 + 1; end local v869 = 1; while UnitDebuff(v196, v869) do v0:SetUnitDebuff(v196, v869); local v978 = v0:GetLine(1); if (v978 and string.find(v978, v868)) then return true; end v869 = v869 + 1; end end return false; end local function v49(v198) for v870 in v198 do v870 = string.gsub(v870, "_", " "); local v871, v872, v873 = string.match(v870, "([^%s]*)([<?>?])(%d+%.?%d*)"); for v979 = 0, 31 do v0:SetPlayerBuff(v979); local v980 = v0:GetLine(1); if not v980 then return v872 == "<"; elseif string.find(v870, v980) then local v1141 = GetPlayerBuffTimeLeft(v979); if v18(v1141, v870) then return true; end break; end end end return false; end local function v50(v199) for v874 in v199 do v874 = string.gsub(v874, "_", " "); local v875, v876, v877 = string.match(v874, "([^%s]*)([<?>?])(%d+%.?%d*)"); for v981 = 1, 32 do v0:SetUnitBuff("player", v981); local v982 = v0:GetLine(1); if not v982 then return v876 == "<"; elseif string.find(v874, v982) then local v1142, v1143 = UnitBuff("player", v981); if v18(v1143, v874) then return true; end break; end end end return false; end local function v51(v200) for v878 in v200 do v0:SetInventoryItem("player", GetInventorySlotInfo("MainHandSlot")); v878 = string.gsub(v878, "_", " "); if (v0:Find(v878) == 1) then return true; end end return false; end local function v52(v201) for v879 in v201 do v0:SetInventoryItem("player", GetInventorySlotInfo("SecondaryHandSlot")); v879 = string.gsub(v879, "_", " "); if (v0:Find(v879) == 1) then return true; end end return false; end local function v53(v202, v203) for v880 in v203 do v880 = string.gsub(v880, "_", " "); local v881, v882, v883 = string.match(v880, "([^%s]*)([<?>?])(%d+%.?%d*)"); for v983 = 1, 16 do v0:SetUnitDebuff(v202, v983); local v984 = v0:GetLine(1); if not v984 then for v1123 = 17, 48 do v0:SetUnitBuff(v202, v1123); local v1124 = v0:GetLine(1); if not v1124 then return v882 == "<"; elseif string.find(v880, v1124) then local v1179, v1180 = UnitBuff(v202, v1123); if v18(v1180, v880) then return true; end break; end end elseif string.find(v880, v984) then local v1144, v1145 = UnitDebuff(v202, v983); if v18(v1145, v880) then return true; end break; end end end return false; end local v54 = {["魔法"]="Magic",["中毒"]="Poison",["诅咒"]="Curse",["疾病"]="Disease"}; local function v55(v204, v205) for v884 in v205 do v884 = string.gsub(v884, "_", " "); for v985 = 1, 16 do v0:SetUnitDebuff(v204, v985); local v986, v986, v987 = UnitDebuff(v204, v985); if v987 then if string.find(v987, v54[v884]) then return true; end else for v1125 = 17, 48 do v0:SetUnitBuff(v204, v1125); local v1126 = v0:GetLine(1, 1); if v1126 then if string.find(v54[v1126], v54[v884]) then return true; end end end end end end return false; end local function v56(v206) local v207 = nil; local v208 = gsub(gsub(v206, "^ +", ""), " +$", ""); if (string.find(v208, "^(%d+)$")) then v207 = GetItemInfo(v208); elseif (string.find(v208, "|c%x+|Hitem:%d+:%d+:%d+:%d+|h%[.+]|h|r")) then local v1093, v1093, v1093, v1094 = string.find(v208, "|c%x+|H(item:(%d+):%d+:%d+:%d+)|h%[.+]|h|r"); v207 = GetItemInfo(v1094); else v207 = v208; end if (type(v207) == "string") then else return; end if string.find(v207, "^[%s%p]+(.+)[%s%p]+$") then _, _, v207 = string.find(v207, "^[%s%p]+(.+)[%s%p]+$"); end return v207; end local function v57(v209, v210) local v211 = GetInventoryItemLink("player", v210); local v212 = v211 and select(3, string.find(v211, "%[(.+)%]")); if (v212 == v209) then return true; end return false; end local function v58(v213, v214) for v885 in v213 do local v886 = v56(v885); if not v886 then return; end if v214 then if (v214 == 16) then return v57(v886, 16); elseif (v214 == 17) then return v57(v886, 17); end else for v1095 = 0, 19 do if v57(v886, v1095) then return true; end end end end return false; end local function v59(v215) for v887 in v215 do local v888, v889, v890 = string.match(v887, "([^%s]*)([<?>?])(%d+%.?%d*)"); if not v889 then v888 = string.match(v887, "([^%s]*)"); end local v891 = GetNumTalentTabs(); for v988 = 1, v891 do local v989 = GetNumTalents(v988); for v1048 = 1, v989 do local v1049, v1050, v1050, v1050, v1051 = GetTalentInfo(v988, v1048); if (v888 == v1049) then if (v889 and (v889 == ">")) then return v1051 > tonumber(v890); elseif (v889 and (v889 == "<")) then return v1051 < tonumber(v890); else return v1051; end end end end end end local v60 = {"(鼠标)","(玩家)","(宠物)","(小队)(%d)","(小队宠物)(%d)","(团队)(%d+)","(团队宠物)(%d+)","目标","目标的目标"}; local v61 = {"mouseover","player","pet","party%d","partypet%d","raid%d","raidpet%d","target","targettarget"}; local v62 = {}; for v216, v217 in ipairs(v60) do v62[v217] = v61[v216]; end local function v63(v220) for v892, v893 in pairs(v62) do local v894, v895 = string.match(v220, v892); if v894 then if v895 then return string.gsub(v893, "%%d", v895); else return v893; end end end return v220; end local function v64(v221) if not v221 then return false; end local v222 = 1; repeat local v896, v897, v898, v899; local v900 = false; for v990, v991 in ipairs(v60) do local v992 = v63(v991); local v993 = v991; v896, v897, v898, v899 = string.find(v221, "^" .. v992, v222); if not v896 then v896, v897, v898, v899 = string.find(v221, "^" .. v993, v222); if v896 then v900 = true; end end if v897 then break; end end if not v897 then return false; end if ((v222 > 1) and not v900 and (v898 ~= "target")) then return false; end if (v899 and (tonumber(v899) == 0)) then return false; end if (((v898 == "raid") or (v898 == "raidpet")) and (tonumber(v899) > 40)) then return false; end if (((v898 == "partypet") or (v898 == "party")) and (tonumber(v899) > 4)) then return false; end v222 = v897 + 1; until v222 > string.len(v221) return v222 > 1; end local function v65(v223, v224) for v901 in v224 do if UnitExists(v223) then local v1052 = {}; if v64(v901) then local v1127 = UnitIsUnit(v223, v63(v901)); table.insert(v1052, v1127); for v1146, v1147 in ipairs(v1052) do if (v1147 == 1) then return UnitIsUnit(v223, v63(v901)); end end else local v1128 = string.find(string.lower(GetUnitName(v223)), string.lower(v901)); table.insert(v1052, v1128); for v1148, v1149 in ipairs(v1052) do if v1149 then return true; end end end end end return false; end local function v66(v225, v226) local v227; local v228 = {str=1,agi=2,sta=3,int=4,spi=5}; local v229, v230 = UnitAttackPower("player"); if (v225 == "ap") then v227 = v229 + v230; else _, v227 = UnitStat("player", v228[v225]); end for v902 in v226 do if v18(v227, v902) then return true; end end return false; end local function v67(v231) for v903 in v231 do if string.find(string.lower(GetRealZoneText()), string.lower(v903)) then return true; end end return false; end local function v68(v232) for v904 in v232 do if string.find(string.lower(GetSubZoneText()), string.lower(v904)) then return true; end end return false; end local function v69(v233) for v905 in v233 do if CastingBarFrame:IsShown() then local v1053 = tonumber(string.match(CastingBarText:GetText(), "([%d%.]+)s")); if (v1053 and v18(v1053, v905)) then return true; end end end return false; end local function v70() if CastingBarFrame:IsShown() then local v994 = tonumber(string.match(CastingBarText:GetText(), "([%d%.]+)s")) * 1000; local v995 = select(3, GetNetStats()); if ((v994 + v995) == v7) then return true; end end return false; end local function v71() local v234 = GetMouseFocus(); if not v234 then return; end if v234['unit'] then return v234['unit']; end for v906, v907 in ipairs(v14) do local v908 = v907(v234); if v908 then return v908; end end end local v72 = {help=function(v235) return UnitCanAssist("player", v235); end,exists=function(v236) return UnitExists(v236); end,harm=function(v237) return UnitCanAttack("player", v237); end,dead=function(v238) return UnitIsDead(v238) or UnitIsGhost(v238); end,alive=function(v239) return not (UnitIsDead(v239) or UnitIsGhost(v239)); end,combat=function() return UnitAffectingCombat("player"); end,stealth=function() return v19("Ability_Ambush") or v19("Ability_Stealth"); end,move=function() local v240 = AceLibrary("SpecialEvents-Movement-2.0"); return v240:PlayerMoving(); end,isnpc=function(v241) return not UnitIsPlayer(v241); end,isplayer=function(v242) return UnitIsPlayer(v242); end,isctl=function(v243) return UnitPlayerControlled(v243) == 1; end,mod=function(v244, v245) if (v245 == true) then return IsAltKeyDown() or IsControlKeyDown() or IsShiftKeyDown(); else local v996 = (IsAltKeyDown() and v245['alt']) or (IsControlKeyDown() and v245['ctrl']) or (IsShiftKeyDown() and v245['shift']); return v996; end end,shift=function() return IsShiftKeyDown(); end,alt=function() return IsAltKeyDown(); end,ctrl=function() return IsControlKeyDown(); end,stance=function(v246, v247) return v37(v247); end,cp=function(v248, v249) return v20(v249); end,cd=function(v250, v251) return v28(v251); end,myaura=function(v252, v253) if (v253 == true) then return false; else return v48("player", v253); end end,mybufftime=function(v254, v255) if (v255 == true) then return false; else return v49(v255); end end,mainhandbuff=function(v256, v257) if (v257 == true) then return false; else return v51(v257); end end,offhandbuff=function(v258, v259) if (v259 == true) then return false; else return v52(v259); end end,mybuffapp=function(v260, v261) return v50(v261); end,mydebuffapp=function(v262, v263) return v53("player", v263); end,targetaura=function(v264, v265) if (v265 == true) then return false; else return v48("target", v265); end end,targetdebuffapp=function(v266, v267) return v53("target", v267); end,targettargetaura=function(v268, v269) if (v269 == true) then return false; else return v48("targettarget", v269); end end,mouseoveraura=function(v270, v271) if (v271 == true) then return false; else return v48(v71() or "mouseover", v271); end end,mouseoverdebuffapp=function(v272, v273) return v53(v71() or "mouseover", v273); end,aura=function(v274, v275) if (v275 == true) then return false; else return v48(v274, v275); end end,debuffapp=function(v276, v277) return v53(v276, v277); end,mydebufftype=function(v278, v279) if (v279 == true) then return false; else return v55("player", v279); end end,targetdebufftype=function(v280, v281) if (v281 == true) then return false; else return v55("target", v281); end end,targettargetdebufftype=function(v282, v283) if (v283 == true) then return false; else return v55("targettarget", v283); end end,mouseoverdebufftype=function(v284, v285) if (v285 == true) then return false; else return v55(v71() or "mouseover", v285); end end,myhp=function(v286, v287) return v21("player", v287); end,mylosthp=function(v288, v289) return v22("player", v289); end,mymp=function(v290, v291) return v23("player", v291); end,mylostmp=function(v292, v293) return v24("player", v293); end,targethp=function(v294, v295) return v21("target", v295); end,targetlosthp=function(v296, v297) return v22("target", v297); end,targetmp=function(v298, v299) return v23("target", v299); end,targelostmp=function(v300, v301) return v24("target", v301); end,targettargethp=function(v302, v303) return v21("targettarget", v303); end,targettargelosthp=function(v304, v305) return v22("targettarget", v305); end,targettargetmp=function(v306, v307) return v23("targettarget", v307); end,targetargelostmp=function(v308, v309) return v24("targettarget", v309); end,mouseoverhp=function(v310, v311) return v21(v71() or "mouseover", v311); end,mouseoverlosthp=function(v312, v313) return v22(v71() or "mouseover", v313); end,mouseovermp=function(v314, v315) return v23(v71() or "mouseover", v315); end,mouseoverlostmp=function(v316, v317) return v24(v71() or "mouseover", v317); end,hp=function(v318, v319) return v21(v318, v319); end,losthp=function(v320, v321) return v22(v320, v321); end,mp=function(v322, v323) return v23(v322, v323); end,lostmp=function(v324, v325) return v24(v324, v325); end,attacktime=function(v326, v327) return v29(v327); end,remainingtime=function(v328, v329) return v30(v329); end,attacktimepercent=function(v330, v331) return v31(v331); end,lastattacktime=function(v332, v333) return v32(v333); end,maxattacktime=function(v334, v335) return v33(v335); end,maxrangedtime=function(v336, v337) return v34(v337); end,can=function(v338, v339) return v39(v339); end,iscur=function(v340, v341) return v40(v341); end,inrange=function(v342, v343) for v909 in v343 do return v41[v909] == 1; end end,solo=function() return (GetNumPartyMembers() == 0) and (GetNumRaidMembers() == 0); end,group=function(v344, v345) if (v345 == true) then return (GetNumPartyMembers() > 0) or (GetNumRaidMembers() > 0); else return v44(v345); end end,class=function(v346, v347) if (v347 == true) then return false; else return v47(v346, v347); end end,ismana=function(v348) return UnitPowerType(v348) == 0; end,pet=function(v349, v350) if (v350 == true) then return UnitExists("pet"); else return v350[UnitCreatureFamily("pet") or nil]; end end,behind=function() return v4; end,iscast=function() return v6 == true; end,channeling=function() return v8 == true; end,btn1=function() return v45 == "LeftButton"; end,btn2=function() return v45 == "RightButton"; end,equiped=function(v351, v352) return v58(v352); end,mainequiped=function(v353, v354) return v58(v354, 16); end,ohequiped=function(v355, v356) return v58(v356, 17); end,type=function(v357, v358) if (v358 == true) then return false; else return v358[UnitCreatureType(v357) or nil]; end end,target=function(v359, v360) return v65("target", v360); end,targettarget=function(v361, v362) return v65("targettarget", v362); end,talentpoint=function(v363, v364) return v59(v364); end,str=function(v365, v366) return v66("str", v366); end,agi=function(v367, v368) return v66("agi", v368); end,sta=function(v369, v370) return v66("sta", v370); end,int=function(v371, v372) return v66("int", v372); end,spi=function(v373, v374) return v66("spi", v374); end,ap=function(v375, v376) return v66("ap", v376); end,map=function(v377, v378) return v67(v378); end,zone=function(v379, v380) return v68(v380); end,casttime=function(v381, v382) return v69(v382); end,fastcast=function() return v70(); end}; local v73 = {form=function(v383, v384) return v37(v384); end,myau=function(v385, v386) return v72.myaura(v385, v386); end,mybut=function(v387, v388) return v72.mybufftime(v387, v388); end,mhbu=function(v389, v390) return v72.mainhandbuff(v389, v390); end,ohbu=function(v391, v392) return v72.offhandbuff(v391, v392); end,mybuapp=function(v393, v394) return v50(v394); end,mydeapp=function(v395, v396) return v53("player", v396); end,tau=function(v397, v398) return v72.targetaura(v397, v398); end,tdeapp=function(v399, v400) return v53("target", v400); end,ttau=function(v401, v402) return v72.targettargetaura(v401, v402); end,moau=function(v403, v404) return v72.mouseoveraura(v403, v404); end,modeapp=function(v405, v406) return v53(v71() or "mouseover", v406); end,au=function(v407, v408) return v72.aura(v407, v408); end,deapp=function(v409, v410) return v53(v409, v410); end,mydty=function(v411, v412) return v72.mydebufftype(v411, v412); end,tdty=function(v413, v414) return v72.targetdebufftype(v413, v414); end,ttdty=function(v415, v416) return v72.targettargetdebufftype(v415, v416); end,modty=function(v417, v418) return v72.mouseoverdebufftype(v417, v418); end,mlhp=function(v419, v420) return v22("player", v420); end,mlmp=function(v421, v422) return v24("player", v422); end,thp=function(v423, v424) return v21("target", v424); end,tlhp=function(v425, v426) return v22("target", v426); end,tmp=function(v427, v428) return v23("target", v428); end,tlmp=function(v429, v430) return v24("target", v430); end,tthp=function(v431, v432) return v21("targettarget", v432); end,ttlhp=function(v433, v434) return v22("targettarget", v434); end,ttmp=function(v435, v436) return v23("targettarget", v436); end,ttlmp=function(v437, v438) return v24("targettarget", v438); end,mohp=function(v439, v440) return v21(v71() or "mouseover", v440); end,molhp=function(v441, v442) return v22(v71() or "mouseover", v442); end,momp=function(v443, v444) return v23(v71() or "mouseover", v444); end,molmp=function(v445, v446) return v24(v71() or "mouseover", v446); end,lhp=function(v447, v448) return v22(v447, v448); end,lmp=function(v449, v450) return v24(v449, v450); end,at=function(v451, v452) return v29(v452); end,rt=function(v453, v454) return v30(v454); end,atp=function(v455, v456) return v31(v456); end,lat=function(v457, v458) return v32(v458); end,mat=function(v459, v460) return v33(v460); end,mrt=function(v461, v462) return v34(v462); end,chan=function() return v8 == true; end,eq=function(v463, v464) return v58(v464); end,meq=function(v465, v466) return v58(v466, 16); end,oheq=function(v467, v468) return v58(v468, 17); end,tt=function(v469, v470) return v65("targettarget", v470); end,tp=function(v471, v472) return v59(v472); end,ct=function(v473, v474) return v69(v474); end,fc=function() return v70(); end}; local v74 = {["友好"]=function(v475) return UnitCanAssist("player", v475); end,["存在"]=function(v476) return UnitExists(v476); end,["敌对"]=function(v477) return UnitCanAttack("player", v477); end,["死亡"]=function(v478) return UnitIsDead(v478) or UnitIsGhost(v478); end,["存活"]=function(v479) return not (UnitIsDead(v479) or UnitIsGhost(v479)); end,["战斗"]=function() return UnitAffectingCombat("player"); end,["潜行"]=function() return v72.stealth(); end,["移动"]=function() return v72.move(); end,["是npc"]=function(v480) return not UnitIsPlayer(v480); end,["是玩家"]=function(v481) return UnitIsPlayer(v481); end,["被操控"]=function(v482) return UnitPlayerControlled(v482) == 1; end,["组合键"]=function(v483, v484) return v72.mod(v483, v484); end,["姿态"]=function(v485, v486) return v37(v486); end,["形态"]=function(v487, v488) return v37(v488); end,["连击点"]=function(v489, v490) return v20(v490); end,["冷却"]=function(v491, v492) return v28(v492); end,["我的状态"]=function(v493, v494) return v72.myaura(v493, v494); end,["我的增益时间"]=function(v495, v496) return v72.mybufftime(v495, v496); end,["主手"]=function(v497, v498) return v72.mainhandbuff(v497, v498); end,["副手"]=function(v499, v500) return v72.offhandbuff(v499, v500); end,["我的增益层数"]=function(v501, v502) return v50(v502); end,["我的减益层数"]=function(v503, v504) return v53("player", v504); end,["目标状态"]=function(v505, v506) return v72.targetaura(v505, v506); end,["目标减益层数"]=function(v507, v508) return v53("target", v508); end,["目标的目标状态"]=function(v509, v510) return v72.targettargetaura(v509, v510); end,["鼠标状态"]=function(v511, v512) return v72.mouseoveraura(v511, v512); end,["鼠标减益层数"]=function(v513, v514) return v53(v71() or "mouseover", v514); end,["状态"]=function(v515, v516) return v72.aura(v515, v516); end,["减益层数"]=function(v517, v518) return v53(v517, v518); end,["我的减益类型"]=function(v519, v520) return v72.mydebufftype(v519, v520); end,["目标减益类型"]=function(v521, v522) return v72.targetdebufftype(v521, v522); end,["目标的目标减益类型"]=function(v523, v524) return v72.targettargetdebufftype(v523, v524); end,["鼠标减益类型"]=function(v525, v526) return v72.mouseoverdebufftype(v525, v526); end,["我的血量"]=function(v527, v528) return v21("player", v528); end,["我损失的血量"]=function(v529, v530) return v22("player", v530); end,["我的mp"]=function(v531, v532) return v23("player", v532); end,["我损失的mp"]=function(v533, v534) return v24("player", v534); end,["目标血量"]=function(v535, v536) return v21("target", v536); end,["目标损失血量"]=function(v537, v538) return v22("target", v538); end,["目标mp"]=function(v539, v540) return v23("target", v540); end,["目标损失mp"]=function(v541, v542) return v24("target", v542); end,["目标的目标血量"]=function(v543, v544) return v21("targettarget", v544); end,["目标的目标损失血量"]=function(v545, v546) return v22("targettarget", v546); end,["目标的目标mp"]=function(v547, v548) return v23("targettarget", v548); end,["目标的目标损失mp"]=function(v549, v550) return v24("targettarget", v550); end,["鼠标血量"]=function(v551, v552) return v21(v71() or "mouseover", v552); end,["鼠标损失血量"]=function(v553, v554) return v22(v71() or "mouseover", v554); end,["鼠标mp"]=function(v555, v556) return v23(v71() or "mouseover", v556); end,["鼠标损失mp"]=function(v557, v558) return v24(v71() or "mouseover", v558); end,["损失mp"]=function(v559, v560) return v24(v559, v560); end,["攻击时间"]=function(v561, v562) return v29(v562); end,["剩余攻击时间"]=function(v563, v564) return v30(v564); end,["攻击时间百分比"]=function(v565, v566) return v31(v566); end,["上次攻击时间"]=function(v567, v568) return v32(v568); end,["攻击间隔"]=function(v569, v570) return v33(v570); end,["远程间隔"]=function(v571, v572) return v34(v572); end,["可以"]=function(v573, v574) return v39(v574); end,["正在执行"]=function(v575, v576) return v40(v576); end,["施法距离内"]=function(v577, v578) for v910 in v578 do return v41[v910] == 1; end end,["单人"]=function() return (GetNumPartyMembers() == 0) and (GetNumRaidMembers() == 0); end,["队伍"]=function(v579, v580) return v72.group(v579, v580); end,["职业"]=function(v581, v582) return v72.class(v581, v582); end,["有魔法值"]=function(v583) return UnitPowerType(v583) == 0; end,["宠物"]=function(v584, v585) return v72.pet(v584, v585); end,["背后"]=function() return v4; end,["在施法"]=function() return v6 == true; end,["在引导"]=function() return v8 == true; end,["左键"]=function() return v45 == "LeftButton"; end,["右键"]=function() return v45 == "RightButton"; end,["已装备"]=function(v586, v587) return v58(v587); end,["主手"]=function(v588, v589) return v58(v589, 16); end,["副手"]=function(v590, v591) return v58(v591, 17); end,["类型"]=function(v592, v593) return v72.type(v592, v593); end,["目标"]=function(v594, v595) return v65("target", v595); end,["目标的目标"]=function(v596, v597) return v65("targettarget", v597); end,["天赋"]=function(v598, v599) return v59(v599); end,["力量"]=function(v600, v601) return v66("str", v601); end,["敏捷"]=function(v602, v603) return v66("agi", v603); end,["耐力"]=function(v604, v605) return v66("sta", v605); end,["智力"]=function(v606, v607) return v66("int", v607); end,["精神"]=function(v608, v609) return v66("spi", v609); end,["攻强"]=function(v610, v611) return v66("ap", v611); end,["地图"]=function(v612, v613) return v67(v613); end,["区域"]=function(v614, v615) return v68(v615); end,["施法时间"]=function(v616, v617) return v69(v617); end,["快速施法"]=function() return v70(); end}; local function v75(v618, v619) local v620 = true; for v911, v912 in pairs(v618) do local v913, v914 = string.find(v911, "^no"); if not v914 then v913, v914 = string.find(v911, "^无"); end local v915 = (v914 and string.sub(v911, v914 + 1)) or v911; local v916 = v72[v915] or v73[v915] or v74[v915]; if v916 then local v1054 = v916(v619, v912); if v914 then v1054 = not v1054; end v620 = v620 and v1054; if not v620 then return false; end end end return true; end local function v76(v621) for v917, v918 in ipairs(v621) do for v997, v998 in ipairs(v918.conditionGroups) do local v999 = v63(v998.target); local v997, v997, v1000 = string.find(v999, "^mouseover(.*)"); if not v1000 then v997, v997, v1000 = string.find(v999, "^mo(.*)"); end if v1000 then v999 = (v71() or "mouseover") .. v1000; end if (not v999 or (v999 == "focus")) then v999 = "target"; end local v1001 = v75(v998.conditions, v999); if v1001 then return v918, v999, v998['target']; end end end end local function v77(v622) local v623 = {}; for v919, v920 in ipairs(v17(v622, ";")) do local v921 = {conditionGroups={}}; table.insert(v623, v921); local v922 = 1; repeat local v1002, v1003, v1004 = string.find(v920, "%s*%[([^]]*)]%s*", v922); if not v1004 then break; end local v1005 = {target="target",conditions={}}; table.insert(v921.conditionGroups, v1005); for v1055, v1056 in ipairs(v17(v1004, ",")) do local v1055, v1055, v1057, v1058, v1059, v1060, v1061, v1062 = string.find(v1056, "^%s*(@?)([%w\128-\255]+)([:=]?)(>?)(<?)([^%s]*)%s*$"); if v1057 then if ((v1057 == "@") and (v1059 == "") and (v1062 == "")) then v1005['target'] = v1058; elseif (v1057 == "") then if ((v1059 == ":") or (v1059 == "=")) then local v1184 = {}; for v1192, v1193 in ipairs(v17(v1062, "/")) do if (v1193 ~= "") then v1184[tonumber(v1193) or string.lower(v1193)] = true; end end v1005['conditions'][string.lower(v1058)] = v1184; else v1005['conditions'][string.lower(v1058)] = true; end if (v1060 == ">") then local v1187 = {}; for v1194, v1195 in ipairs(v17(v1062, ">")) do if (v1195 ~= "") then v1187[tonumber(v1060 .. v1195) or string.lower(v1060 .. v1195)] = true; end end v1005['conditions'][string.lower(v1058)] = v1187; elseif (v1061 == "<") then local v1196 = {}; for v1201, v1202 in ipairs(v17(v1062, "<")) do if (v1202 ~= "") then v1196[tonumber(v1061 .. v1202) or string.lower(v1061 .. v1202)] = true; end end v1005['conditions'][string.lower(v1058)] = v1196; end end end end v922 = v1003 + 1; until false v921['text'] = v16(string.sub(v920, v922)); if (table.getn(v921.conditionGroups) == 0) then local v1063 = {target="target",conditions={}}; table.insert(v921.conditionGroups, v1063); end end return v623; end local function v78(v624) local v625, v626 = GetSpellInfo(v624); local v627, v628 = GetSpellIndex(v625, v626); return v627, v628; end local v79 = {["/cast"]=function(v629) for v924, v925 in ipairs(v629) do local v926 = v16(v925.text); if (string.sub(v926, 1, 1) == "!") then v926 = string.sub(v926, 2); end v925['spellSlot'], v925['bookType'] = v78(v926); end end,["/castsequence"]=function(v630) sequence = v630[1]; if not sequence then return; end sequence['index'] = 1; sequence['reset'] = {}; sequence['orderspells'] = {}; sequence['status'] = 0; local v636, v637, v638 = string.find(sequence.text, "^%s*reset=([%w/]+)%s*"); s = (v637 and string.sub(sequence.text, v637 + 1)) or sequence['text']; if v638 then for v1064, v1065 in ipairs(v17(v638, "/")) do local v1066 = tonumber(v1065); if (v1066 and (v1066 > 0)) then if (not sequence['reset']['secs'] or (v1066 < sequence['reset']['secs'])) then sequence['reset']['secs'] = v1066; end else sequence['reset'][v1065] = true; end end end for v929, v930 in ipairs(v17(s, ",")) do if v930 then table.insert(sequence.orderspells, v16(v930)); end end end,["/use"]=function(v639) for v931, v932 in pairs(v15) do if v932['name'] then for v1096, v1097 in ipairs(v639) do if (v1097 and ((string.lower(v1097.text) == string.lower(v932.name)) or (string.lower(v1097.text) == v932['id']))) then v1097['itemID'] = v931; end end end end end,["/target"]=true}; local v80 = {["/施放"]=function(v640) v79["/cast"](v640); end,["/顺序"]=function(v641) v79["/castsequence"](v641); end,["/使用"]=function(v642) v79["/use"](v642); end,["/equip"]=function(v643) v79["/use"](v643); end,["/主手"]=function(v644) v79["/use"](v644); end,["/equipoh"]=function(v645) v79["/use"](v645); end,["/副手"]=function(v646) v79["/use"](v646); end}; local function v81(v647, v648) return (v648 or 0) + 1; end local function v82(v649) local v650 = GetMacroIndexByName(v649); if (v650 == 0) then return nil; end local v649, v651, v652 = GetMacroInfo(v650); if (not v652 and (SuperMacroFrame ~= nil)) then v652 = GetSuperMacroInfo(v649, "body"); end if not v652 then return nil; end local v653 = {name=v649,iconTexture=v651,commands={}}; for v933, v934 in ipairs(v17(v652, "\n", true)) do if (v933 == 1) then local v1067, v1067, v1068, v1069 = string.find(v934, "^%s*#([%w\128-\255]+)(.*)$"); if ((v1068 and (v1068 == "show")) or (v1068 == "图标")) then if (v1069 and not string.find(v1069, "^%w")) then v653['tooltips'] = {}; for v1176, v1177 in ipairs(v77(v1069)) do local v1178 = {conditionGroups=v1177['conditionGroups'],spellSlot=v78(v16(v1177.text)),bookType=select(2, v78(v16(v1177.text)))}; table.insert(v653.tooltips, v1178); end end end end if ((v933 > 1) or not v653['tooltips']) then local v1070, v1071, v1072 = string.find(v934, "^(/[%w\128-\255]+)%s*"); if v1072 then local v1130 = {name=v1072,text=string.sub(v934, v1071 + 1)}; table.insert(v653.commands, v1130); local v1131 = v79[v1072] or v80[v1072]; if v1131 then v1130['args'] = v77(v1130.text); if (type(v1131) == "function") then v1131(v1130.args); end if (v1072 == "/castsequence") then table.insert(v11, v1130['args'][1]); end end for v1151, v1152 in pairs(SlashCmdList) do for v1169 in v81 do local v1170 = _G["SLASH_" .. v1151 .. v1169]; if not v1170 then break; end if (v1170 == v1072) then v1130['fn'] = v1152; break; end end if v1130['fn'] then break; end end elseif (v934 ~= "") then table.insert(v653.commands, {text=v934}); end end end return v653; end local function v83(v654) local v655 = v10[v654]; if v655 then return v655; end v10[v654] = v82(v654); return v10[v654]; end local function v84(v657) for v935, v936 in ipairs(v657.commands) do if v936['fn'] then local v1073 = v936.fn(v936.text, v936); if ((v1073 ~= nil) and (v1073 == false)) then break; end elseif v936['name'] then ChatFrameEditBox:SetText(v936['name'] .. " " .. v936['text']); ChatEdit_SendText(ChatFrameEditBox); else ChatFrameEditBox:SetText(v936.text); ChatEdit_SendText(ChatFrameEditBox); end end end local function v85(v658) if v658['tooltips'] then local v1006 = v76(v658.tooltips); if (v1006 and v1006['spellSlot'] and v1006['bookType']) then return "spell", v1006['spellSlot'], GetSpellTexture(v1006.spellSlot, v1006.bookType), v1006['bookType']; end end for v937, v938 in ipairs(v658.commands) do if ((v938['name'] == "/cast") or (v938['name'] == "/施放")) then local v1074 = v76(v938.args); if (v1074 and v1074['spellSlot'] and v1074['bookType']) then return "spell", v1074['spellSlot'], GetSpellTexture(v1074.spellSlot, v1074.bookType), v1074['bookType']; end elseif ((v938['name'] == "/castsequence") or (v938['name'] == "/顺序")) then local v1132 = v76(v938.args); if v1132 then local v1171 = false; v1171 = v1132['reset']['shift'] and IsShiftKeyDown(); v1171 = v1171 or (v1132['reset']['alt'] and IsAltKeyDown()); v1171 = v1171 or (v1132['reset']['ctrl'] and IsControlKeyDown()); local v1172 = v1132['orderspells'][(v1171 and 1) or v1132['index']]; if (string.sub(v1172, 1, 1) == "!") then v1172 = string.sub(v1172, 2); end local v1173, v1174 = v78(v1172); if (v1173 and v1174) then return "spell", v1173, GetSpellTexture(v1173, v1174), v1174; end end elseif ((v938['name'] == "/use") or (v938['name'] == "/使用")) then local v1175 = v76(v938.args); if (v1175 and v1175['itemID'] and v15[v1175['itemID']]) then return "item", v1175['itemID'], v15[v1175['itemID']]['texture'], nil; end end end end local function v86(v659, v660) CM_ScanTip:SetOwner(WorldFrame, "ANCHOR_NONE"); CM_ScanTip:SetSpell(v659, v660); local v661, v661, v662 = string.find(CM_ScanTip['costFontString']:GetText() or "", "^(%d+)"); return tonumber(v662); end local function v87(v663) local v664, v665 = v663['spellSlot'], v663['itemID']; local v666, v667, v668, v669 = v85(v663.macro); v663['texture'] = v668; v663['bookType'] = v669; if (v666 == "spell") then v663['cost'] = v86(v667, v669); v663['itemID'] = nil; v663['spellSlot'] = v667; elseif (v666 == "item") then v663['cost'] = 0; v663['itemID'] = v667; v663['spellSlot'] = nil; else v663['cost'] = 0; v663['itemID'] = nil; v663['spellSlot'] = nil; end return (v664 ~= v663['spellSlot']) or (v665 ~= v663['itemID']); end local function v88(v672) local v673 = v9[v672]; if v673 then return v673; end local v674 = GetActionText(v672); if v674 then local v1010 = v83(v674); if v1010 then v673 = {text=v674,macro=v1010,slot=v672}; v87(v673); if v673['spellSlot'] then v673['usable'] = not v673['cost'] or (UnitMana("player") >= v673['cost']); end v9[v672] = v673; return v673; end end end local function v89(v675, v676, ...) local v677 = this; arg1, arg2, arg3, arg4, arg5, arg6, arg7 = unpack(arg); local v678 = floor((v675 - 1) / NUM_ACTIONBAR_BUTTONS) + 1; local v679 = v675 - ((v678 - 1) * NUM_ACTIONBAR_BUTTONS); if (v675 >= 73) then this = _G["BonusActionButton" .. v679]; if this then ActionButton_OnEvent(v676); end else if (v675 >= 61) then this = _G["MultiBarBottomLeftButton" .. v679]; elseif (v675 >= 49) then this = _G["MultiBarBottomRightButton" .. v679]; elseif (v675 >= 37) then this = _G["MultiBarLeftButton" .. v679]; elseif (v675 >= 25) then this = _G["MultiBarRightButton" .. v679]; else this = nil; end if this then ActionButton_OnEvent(v676); end if (v678 == CURRENT_ACTIONBAR_PAGE) then this = _G["ActionButton" .. v679]; if this then ActionButton_OnEvent(v676); end end end this = v677; for v939, v940 in ipairs(v13) do v940(v675, v676, unpack(arg)); end end local function v90() v15 = {}; for v941 = 0, NUM_BAG_SLOTS do for v1011 = GetContainerNumSlots(v941), 1, -1 do local v1012 = GetContainerItemLink(v941, v1011); if v1012 then local v1105, v1105, v1106 = string.find(v1012, "item:(%d+)"); if (v1106 and not v15[v1106]) then local v1154, v1155, v1155, v1155, v1155, v1155, v1155, v1155, v1156 = GetItemInfo(v1106); local v1157 = {bagID=v941,slot=v1011,id=v1106,name=v1154,texture=v1156}; v15[v1106] = v1157; end end end end for v942 = 0, 19 do local v943 = GetInventoryItemLink("player", v942); if v943 then local v1075, v1075, v1076 = string.find(v943, "item:(%d+)"); if (v1076 and not v15[v1076]) then local v1133, v1134, v1134, v1134, v1134, v1134, v1134, v1134, v1135 = GetItemInfo(v1076); local v1136 = {inventoryID=v942,id=v1076,name=v1133,texture=v1135}; v15[v1076] = v1136; end end end end local v91 = {}; v91['UseAction'] = UseAction; function UseAction(v680, v681, v682) local v683 = v88(v680); if (v683 and v683['macro']) then v84(v683.macro); else v91.UseAction(v680, v681, v682); end end v91['ActionButton_SetTooltip'] = ActionButton_SetTooltip; function ActionButton_SetTooltip() local v684 = v88(ActionButton_GetPagedID(this)); if v684 then if v684['spellSlot'] then GameTooltip:SetOwner(this, "ANCHOR_RIGHT"); GameTooltip:SetSpell(v684.spellSlot, v684.bookType); local v1107, v1108 = GetSpellName(v684.spellSlot, v684.bookType); GameTooltipTextRight1:SetText("|cff808080" .. v1108 .. "|r"); GameTooltipTextRight1:Show(); GameTooltip:Show(); elseif v684['itemID'] then local v1159, v1160 = GetItemInfo(v684.itemID); GameTooltip:SetOwner(this, "ANCHOR_RIGHT"); GameTooltip:SetHyperlink(v1160); this['updateTooltip'] = TOOLTIP_UPDATE_TIME; GameTooltip:Show(); end else v91.ActionButton_SetTooltip(); end end local function v94(v685) return v41[v685] or 1; end v91['IsActionInRange'] = IsActionInRange; function IsActionInRange(v686, v687) if v686 then local v1013 = v88(v686); if (v1013 and v1013['macro'] and v1013['spellSlot']) then local v1109 = GetSpellName(v1013.spellSlot, v1013.bookType); return v94(v1109); else return v91.IsActionInRange(v686, v687); end end end v91['IsUsableAction'] = IsUsableAction; function IsUsableAction(v688, v689) local v690 = v88(v688); if (v690 and v690['macro'] and v690['macro']['tooltips']) then if v690['usable'] then return true, false; else return false, true; end else return v91.IsUsableAction(v688, v689); end end v91['GetActionTexture'] = GetActionTexture; function GetActionTexture(v691) local v692 = v88(v691); if (v692 and v692['macro'] and v692['macro']['tooltips']) then return v692['texture'] or "Interface\\Icons\\INV_Misc_QuestionMark"; else return v91.GetActionTexture(v691); end end v91['GetActionCooldown'] = GetActionCooldown; function GetActionCooldown(v693) local v694 = v88(v693); if (v694 and v694['macro']) then if v694['spellSlot'] then return GetSpellCooldown(v694.spellSlot, v694.bookType); elseif v694['itemID'] then local v1162 = v15[v694['itemID']]; if v1162 then if (v1162['bagID'] and v1162['slot']) then return GetContainerItemCooldown(v1162.bagID, v1162.slot); elseif v1162['inventoryID'] then return GetInventoryItemCooldown("player", v1162.inventoryID); end end end return 0, 0, 0; else return v91.GetActionCooldown(v693); end end v91['SlashCmdList'] = {}; v91['SlashCmdList']['TARGET'] = SlashCmdList['TARGET']; SlashCmdList['TARGET'] = function(v695) local v696, v697 = v76((command and command['args']) or v77(v695)); if v696 then if (v697 ~= "target") then TargetUnit(v697); else v91['SlashCmdList'].TARGET(v16(v696.text)); end end end; local function v102(v698) local v699 = GetTime(); if ((v699 - v1) < 0.1) then return; end v1 = v699; if (v12 and (v12['status'] >= 2) and ((v699 - v12['lastUpdate']) >= 0.2)) then if (v12['status'] == 2) then if (v12['index'] >= table.getn(v12.orderspells)) then v12['index'] = 1; else v12['index'] = v12['index'] + 1; end end for v1077, v1078 in pairs(v9) do for v1110, v1111 in ipairs(v1078['macro'].commands) do if ((v1111['name'] == "/castsequence") and (v1111['args'][1] == v12)) then v89(v1077, "ACTIONBAR_SLOT_CHANGED", v1077); end end end v12 = nil; end for v944, v945 in ipairs(v11) do if ((v945['index'] > 1) and v945['reset']['secs'] and ((v699 - v945['lastUpdate']) >= v945['reset']['secs'])) then v945['index'] = 1; for v1112, v1113 in pairs(v9) do for v1138, v1139 in ipairs(v1113['macro'].commands) do if ((v1139['name'] == "/castsequence") and (v1139['args'][1] == v945)) then v89(v1112, "ACTIONBAR_SLOT_CHANGED", v1112); end end end end end for v946, v947 in pairs(v9) do if v87(v947) then v947['usable'] = not v947['cost'] or (UnitMana("player") >= v947['cost']); v89(v946, "ACTIONBAR_SLOT_CHANGED", v946); else local v1081 = not v947['cost'] or (UnitMana("player") >= v947['cost']); if (v1081 ~= v947['usable']) then v947['usable'] = v1081; v89(v946, "ACTIONBAR_UPDATE_USABLE"); end end end if (v4 == false) then local v1014 = GetTime(); if ((v1014 - v5) > 0.3) then v4 = true; end end if (v2 == true) then local v1015 = GetTime(); if ((v1015 - v3) > 4) then v2 = false; end end if UnitExists("target") then v43(); end end local function v103() if ((event == "UPDATE_MACROS") or (event == "SPELLS_CHANGED")) then v12 = nil; v10 = {}; v9 = {}; v11 = {}; v90(); elseif (event == "ACTIONBAR_SLOT_CHANGED") then v9[arg1] = nil; v89(arg1, "ACTIONBAR_SLOT_CHANGED", arg1); elseif (event == "BAG_UPDATE") then v10 = {}; v9 = {}; v90(); elseif (event == "PLAYER_LEAVE_COMBAT") then for v1182, v1183 in pairs(v11) do if ((v12 ~= v1183) and (v1183['index'] > 1) and v1183['reset']['combat']) then v1183['index'] = 1; end end elseif (event == "PLAYER_TARGET_CHANGED") then v43(); for v1190, v1191 in pairs(v11) do if ((v12 ~= v1191) and (v1191['index'] > 1) and v1191['reset']['target']) then v1191['index'] = 1; end end elseif v12 then if (event == "SPELLCAST_START") then v12['status'] = 1; v6 = true; v7 = arg2; elseif (event == "SPELLCAST_STOP") then v12['status'] = 2; v12['lastUpdate'] = GetTime(); v6 = false; v7 = 0; elseif (event == "SPELLCAST_CHANNEL_START") then v8 = true; elseif (event == "SPELLCAST_CHANNEL_STOP") then v8 = false; elseif ((event == "SPELLCAST_FAILED") or (event == "SPELLCAST_INTERRUPTED")) then v12['status'] = 3; v6 = false; v8 = false; v7 = 0; end elseif (event == "UI_ERROR_MESSAGE") then if (arg1 == SPELL_FAILED_NOT_BEHIND) then v4 = false; v5 = GetTime(); end elseif (event == "SPELLCAST_START") then v6 = true; v7 = arg2; elseif (event == "SPELLCAST_STOP") then v6 = false; v7 = 0; elseif (event == "SPELLCAST_CHANNEL_START") then v8 = true; elseif (event == "SPELLCAST_CHANNEL_STOP") then v8 = false; elseif ((event == "SPELLCAST_FAILED") or (event == "SPELLCAST_INTERRUPTED")) then v6 = false; v8 = false; v7 = 0; elseif (event == "UNIT_COMBAT") then local v1208 = select(2, UnitClass("player")); if (v1208 == "WARRIOR") then if ((arg1 == "target") and (arg2 == "DODGE")) then v2 = true; v3 = GetTime(); end end end end local v104 = {"UPDATE_MACROS","ACTIONBAR_SLOT_CHANGED","SPELLCAST_START","SPELLCAST_STOP","SPELLCAST_FAILED","SPELLCAST_INTERRUPTED","SPELLCAST_CHANNEL_START","SPELLCAST_CHANNEL_STOP","PLAYER_LEAVE_COMBAT","PLAYER_TARGET_CHANGED","SPELLS_CHANGED","BAG_UPDATE","UI_ERROR_MESSAGE","UNIT_COMBAT"}; CM_ScanTip = CreateFrame("GameTooltip"); for v700, v701 in pairs(v104) do CM_ScanTip:RegisterEvent(v701); end CM_ScanTip:SetScript("OnUpdate", v102); CM_ScanTip:SetScript("OnEvent", v103); CM_ScanTip['costFontString'] = CM_ScanTip:CreateFontString(); CM_ScanTip['rangeFontString'] = CM_ScanTip:CreateFontString(); CM_ScanTip:AddFontStrings(CM_ScanTip:CreateFontString(), CM_ScanTip:CreateFontString()); CM_ScanTip:AddFontStrings(CM_ScanTip.costFontString, CM_ScanTip.rangeFontString); local function v107(v702) if (v8 == true) then return true; elseif (v702 == ATTACK) then return true; elseif (v702 == "自动射击") then return true; elseif (v702 == "射击") then return true; end return false; end local function v108(v703) local v704 = v17(v703, "\n"); for v948, v949 in pairs(v704) do for v1016 in string.gmatch(v949, "[^\r\n]+") do if (not string.find(v1016, "#show") or not string.find(v1016, "#图标")) then ChatFrameEditBox:SetText(v949); ChatEdit_SendText(ChatFrameEditBox); end end end end local function v109(v705) local v706 = GetMacroIndexByName(v705); if not v706 then return false; end local v707, v707, v708 = GetMacroInfo(v706); if (not v708 and (SuperMacroFrame ~= nil)) then v708 = GetSuperMacroInfo(v705, "body"); end return v708; end local function v110(v709) local v710 = v109(v709); if not v710 then return false; end v108(v710); return true; end SLASH_CAST1 = "/cast"; SLASH_CAST2 = "/施放"; SlashCmdList['CAST'] = function(v711, v712) local v713 = v712 and v712['args']; if not v713 then v713 = v77(v711); v79["/cast"](v713); v80["/施放"](v713); end local v714, v715, v716 = v76(v713); local v717 = v715 and not UnitIsUnit(v715, "target"); if v717 then TargetUnit(v715); end if v714 then local v1017 = v16(v714.text); if (string.sub(v1017, 1, 1) == "!") then v1017 = string.sub(v1017, 2); if (v1017 == ATTACK) then AutoAttack(24); elseif (v1017 == "自动射击") then AutoShoot(23); elseif (v1017 == "射击") then AutoShoot(23); end if v107(v1017) then return; elseif (v716 == "focus") then SlashCmdList.FCAST(v1017); else CastSpellByName(v1017); end elseif ((string.sub(v1017, 1, 1) == "{") and (string.sub(v1017, -1) == "}")) then v110(string.sub(v1017, 2, -2)); elseif (v716 == "focus") then SlashCmdList.FCAST(v1017); elseif (v1017 == "停止") then if IsCurrentAction(24) then StopAttack(24); elseif IsAutoRepeatAction(23) then StopShoot(23); else SpellStopCasting(); end else CastSpellByName(v1017); end end if v717 then TargetLastTarget(); end end; SLASH_USE1 = "/use"; SLASH_USE2 = "/使用"; SlashCmdList['USE'] = function(v718, v719) local v720 = v719 and v719['args']; if not v720 then v720 = v77(v718); v79["/use"](v720); v80["/使用"](v720); end local v721, v722, v723 = v76(v720); if (not v721 or not v721['itemID']) then return; end local v724 = v15[v721['itemID']]; if not v724 then return; end local v725 = v722 and not UnitIsUnit(v722, "target"); if v725 then TargetUnit(v722); end if (v724['name'] and (v723 == "focus")) then SlashCmdList.FITEM(v724.name); elseif (v724['bagID'] and v724['slot']) then UseContainerItem(v724.bagID, v724.slot); elseif v724['inventoryID'] then UseInventoryItem(v724.inventoryID); end if v725 then TargetLastTarget(); end end; SLASH_CASTSEQUENCE1 = "/castsequence"; SLASH_CASTSEQUENCE2 = "/顺序"; SlashCmdList['CASTSEQUENCE'] = function(v726, v727) local v728 = v727 and v727['args']; if v12 then return; end if not v728 then v728 = v77(v726); v79["/castsequence"](v728); v80["/顺序"](v728); end local v729, v730, v731 = v76(v728); if not v729 then return; end local v732 = v729['orderspells'][v729['index']]; if (v729 and (v729['index'] > 1)) then local v1018 = false; v1018 = v729['reset']['shift'] and IsShiftKeyDown(); v1018 = v1018 or (v729['reset']['alt'] and IsAltKeyDown()); v1018 = v1018 or (v729['reset']['ctrl'] and IsControlKeyDown()); if v1018 then v729['index'] = 1; end end if v732 then v729['status'] = 0; v729['lastUpdate'] = GetTime(); v12 = v729; local v1021 = v730 and not UnitIsUnit(v730, "target"); if v1021 then TargetUnit(v730); end if (string.sub(v732, 1, 1) == "!") then v732 = string.sub(v732, 2); if (v732 == ATTACK) then AutoAttack(24); elseif (v732 == "自动射击") then AutoShoot(23); elseif (v732 == "射击") then AutoShoot(23); end if v107(v732) then return; elseif (v731 == "focus") then SlashCmdList.FCAST(v732); else CastSpellByName(v732); end elseif (v731 == "focus") then SlashCmdList.FCAST(v732); else CastSpellByName(v732); end if v1021 then TargetLastTarget(); end end end; SLASH_STOPMACRO1 = "/stopmacro"; SLASH_STOPMACRO2 = "/停止宏"; SlashCmdList['STOPMACRO'] = function(v733, v734) local v735 = v76(v77(v733)); if v735 then return false; end end; SLASH_CANCELFORM1 = "/cancelform"; SLASH_CANCELFORM2 = "/取消形态"; SlashCmdList['CANCELFORM'] = function(v736) local v737 = v76(v77(v736)); if v737 then v36(); end end; SLASH_STOPCASTING1 = "/stopcasting"; SLASH_STOPCASTING2 = "/停止施法"; SlashCmdList['STOPCASTING'] = function(v738) local v739 = v76(v77(v738)); if v739 then SpellStopCasting(); end end; SLASH_CANCELAURA1 = "/cancelaura"; SLASH_CANCELAURA2 = "/取消增益"; SlashCmdList['CANCELAURA'] = function(v740) local v741 = v76(v77(v740)); if v741 then for v1082 = 0, 31 do v0:SetPlayerBuff(v1082); local v1083 = v0:GetLine(1); if not v1083 then break; end local v1084 = v17(v16(v741.text), "/"); for v1116, v1117 in ipairs(v1084) do if strfind(strlower(v1083), strlower(v1117)) then CancelPlayerBuff(v1082); end end end end end; SLASH_PETAGGRESSIVE1 = "/petaggressive"; SLASH_PETAGGRESSIVE2 = "/宠物主动"; SlashCmdList['PETAGGRESSIVE'] = function(v742) local v743 = v76(v77(v742)); if v743 then PetAggressiveMode(); end end; SLASH_PETPASSIVE1 = "/petpassive"; SLASH_PETPASSIVE2 = "/宠物被动"; SlashCmdList['PETPASSIVE'] = function(v744) local v745 = v76(v77(v744)); if v745 then PetPassiveMode(); end end; SLASH_PETDEFENSIVE1 = "/petdefensive"; SLASH_PETDEFENSIVE2 = "/宠物防御"; SlashCmdList['PETDEFENSIVE'] = function(v746) local v747 = v76(v77(v746)); if v747 then PetDefensiveMode(); end end; SLASH_PETATTACK1 = "/petattack"; SLASH_PETATTACK2 = "/宠物攻击"; SlashCmdList['PETATTACK'] = function(v748) local v749 = v76(v77(v748)); if v749 then PetAttack(); end end; SLASH_PETFOLLOW1 = "/petfollow"; SLASH_PETFOLLOW2 = "/宠物跟随"; SlashCmdList['PETFOLLOW'] = function(v750) local v751 = v76(v77(v750)); if v751 then PetFollow(); end end; SLASH_PETSTAY1 = "/petstay"; SLASH_PETSTAY2 = "/宠物停留"; SlashCmdList['PETSTAY'] = function(v752) local v753 = v76(v77(v752)); if v753 then PetWait(); end end; SLASH_CLEARTARGET1 = "/cleartarget"; SLASH_CLEARTARGET2 = "/清除目标"; SlashCmdList['CLEARTARGET'] = function(v754) local v755 = v76(v77(v754)); if v755 then ClearTarget(); end end; SLASH_LASTENEMY1 = "/lastenemy"; SLASH_LASTENEMY2 = "/上个敌对"; SlashCmdList['LASTENEMY'] = function(v756) local v757 = v76(v77(v756)); if v757 then TargetLastEnemy(); end end; SLASH_NEARENEMY1 = "/targetenemy"; SLASH_NEARENEMY2 = "/敌对"; SlashCmdList['NEARENEMY'] = function(v758) local v759 = v76(v77(v758)); if v759 then TargetNearestEnemy(); end end; SLASH_LASTTARGET1 = "/lasttarget"; SLASH_LASTTARGET2 = "/上次目标"; SlashCmdList['LASTTARGET'] = function(v760) local v761 = v76(v77(v760)); if v761 then TargetLastTarget(); end end; SLASH_EQUIP1 = "/equip"; SLASH_EQUIP2 = "/主手"; SlashCmdList['EQUIP'] = function(v762) local v763; if not v763 then v763 = v77(v762); v80["/equip"](v763); v80["/主手"](v763); end local v764 = v76(v763); if (not v764 or not v764['itemID']) then return; end local v765 = v15[v764['itemID']]; if not v765 then return; end if v764 then local v1022 = select(3, string.find(GetInventoryItemLink("player", 16) or "", "%[(.+)%]")); if (v1022 == v765['name']) then return; elseif (v765['bagID'] and v765['slot']) then PickupContainerItem(v765.bagID, v765.slot); if CursorCanGoInSlot(16) then EquipCursorItem(16); else ClearCursor(); end end end end; SLASH_EQUIPOH1 = "/equipoh"; SLASH_EQUIPOH2 = "/副手"; SlashCmdList['EQUIPOH'] = function(v766) local v767; if not v767 then v767 = v77(v766); v80["/equipoh"](v767); v80["/副手"](v767); end local v768 = v76(v767); if (not v768 or not v768['itemID']) then return; end local v769 = v15[v768['itemID']]; if not v769 then return; end if v768 then local v1023 = select(3, string.find(GetInventoryItemLink("player", 17) or "", "%[(.+)%]")); if (v1023 == v769['name']) then return; elseif (v769['bagID'] and v769['slot']) then PickupContainerItem(v769.bagID, v769.slot); if CursorCanGoInSlot(17) then EquipCursorItem(17); else ClearCursor(); end end end end; local v130 = {slot0="AmmoSlot",slot1="HeadSlot",slot2="NeckSlot",slot3="ShoulderSlot",slot4="ShirtSlot",slot5="ChestSlot",slot6="WaistSlot",slot7="LegsSlot",slot8="FeetSlot",slot9="WristSlot",slot10="HandsSlot",slot11="Finger0Slot",slot12="Finger1Slot",slot13="Trinket0Slot",slot14="Trinket1Slot",slot15="BackSlot",slot16="MainHandSlot",slot17="SecondaryHandSlot",slot18="RangedSlot",slot19="TabardSlot"}; local function v131(v770, v771) if (CursorHasItem() or SpellIsTargeting()) then ClearCursor(); end local v772, v772, v773 = string.find(GetInventoryItemLink("player", v770) or "", "%[(.+)%]"); if (v773 == v771) then return; else local v1024, v1025 = FindItemInfo(v771); if (v1024 and v1025) then PickupContainerItem(v1024, v1025); if CursorCanGoInSlot(v770) then EquipCursorItem(v770); else ClearCursor(); end end end end SLASH_Equipslot1 = "/equipslot"; SLASH_Equipslot2 = "/装备"; SlashCmdList['Equipslot'] = function(v774) local v775 = v76(v77(v774)); local v774 = (v775 and v16(v775.text)) or v774; local v776, v776, v777, v778 = string.find(v774, "^(%d+) +(.+)$"); if (v777 and v778) then local v1026 = "slot" .. v777; if (not v777 or (type(v130[v1026]) == nil) or not v778) then return; end local v1027 = v56(v778); if not v1027 then return; end if v775 then v131(v777, v1027); end end end; local function v133() for v950 = NUM_BAG_FRAMES, 0, -1 do for v1028 = GetContainerNumSlots(v950), 1, -1 do if not GetContainerItemInfo(v950, v1028) then return v950, v1028; end end end end SLASH_UNEQUIP1 = "/unequip"; SLASH_UNEQUIP2 = "/卸下"; SlashCmdList['UNEQUIP'] = function(v779) local v780 = v76(v77(v779)); local v781 = (v780 and v16(v780.text)) or v779; local v782, v783 = v133(); if v782 then if v780 then PickupInventoryItem(FindItemInfo(v16(v781))); PickupContainerItem(v782, v783); end end end; SLASH_SWITCH1 = "/switch"; SLASH_SWITCH2 = "/切换"; SlashCmdList['SWITCH'] = function(v784) local v785 = v76(v77(v784)); if v785 then PickupInventoryItem(16); PickupInventoryItem(17); end end; local function v136(v786) v0:SetAction(v786); local v787 = v0:GetLine(1); if (GetActionText(v786) or (v787 ~= ATTACK)) then return true; else return false; end end function AutoAttack(v788) if not v788 then v788 = 24; end local v789 = v136(v788); local v790 = GetSpellIndex(ATTACK); if (not UnitExists("target") or UnitIsDead("target")) then TargetNearestEnemy(); elseif not UnitCanAttack("player", "target") then ClearTarget(); end if v789 then PickupSpell(v790, BOOKTYPE_SPELL); PlaceAction(v788); ClearCursor(); elseif (IsCurrentAction(v788) == nil) then UseAction(v788); end end SLASH_AUTOATTACK1 = "/startattack"; SLASH_AUTOATTACK2 = "/attack"; SLASH_AUTOATTACK3 = "/自动攻击"; SlashCmdList['AUTOATTACK'] = function(v791) local v792 = v76(v77(v791)); if v792 then AutoAttack(24); end end; function StopAttack(v793) if not v793 then v793 = 24; end local v794 = v136(v793); local v795 = GetSpellIndex(ATTACK); if v794 then PickupSpell(v795, BOOKTYPE_SPELL); PlaceAction(v793); ClearCursor(); elseif (IsCurrentAction(v793) == 1) then AttackTarget(); end end SLASH_STOPATTACK1 = "/stopattack"; SLASH_STOPATTACK2 = "/停止攻击"; SlashCmdList['STOPATTACK'] = function(v796) local v797 = v76(v77(v796)); if v797 then StopAttack(24); end end; local function v139(v798) v0:SetAction(v798); local v799 = v0:GetLine(1); local v800; if HasWandEquipped() then v800 = "射击"; else v800 = "自动射击"; end if (GetActionText(v798) or (v799 ~= v800)) then return true; else return false; end end function AutoShoot(v801) if not v801 then v801 = 23; end local v802 = v139(v801); local v803; if HasWandEquipped() then v803 = GetSpellIndex("射击"); else v803 = GetSpellIndex("自动射击"); end if v802 then PickupSpell(v803, BOOKTYPE_SPELL); PlaceAction(v801); ClearCursor(); elseif (IsAutoRepeatAction(v801) == nil) then UseAction(v801); end end SLASH_AUTOSHOOT1 = "/autoshoot"; SLASH_AUTOSHOOT2 = "/自动射击"; SlashCmdList['AUTOSHOOT'] = function(v804) local v805 = v76(v77(v804)); if v805 then AutoShoot(23); end end; function StopShoot(v806) if not v806 then v806 = 23; end local v807 = v139(v806); local v808; if HasWandEquipped() then v808 = GetSpellIndex("射击"); else v808 = GetSpellIndex("自动射击"); end if v807 then PickupSpell(v808, BOOKTYPE_SPELL); PlaceAction(v806); ClearCursor(); elseif (IsAutoRepeatAction(v806) == 1) then UseAction(v806); end end SLASH_STOPSHOOT1 = "/stopshoot"; SLASH_STOPSHOOT1 = "/停止射击"; SlashCmdList['STOPSHOOT'] = function(v809) local v810 = v76(v77(v809)); if v810 then StopShoot(23); end end; ClassicMacros = {}; ClassicMacros.RegisterActionEventHandler = function(v811) if (type(v811) == "function") then table.insert(v13, v811); end end; ClassicMacros.RegisterActionEventHandler(function(v812, v813) local v814 = 120; if (not BActionButton or not BActionBar) then return; end for v951 = 1, v814 do local v952 = getglobal("BActionBar" .. v951); if not v952 then break; end local v953, v954 = BActionBar.GetStart(v951), BActionBar.GetEnd(v951); local v955 = 0; local v955 = BActionBar.GetPage(v951); if (v955 == 0) then v955 = BActionBar.GetStance(v951); end if (v955 == 0) then v955 = BActionBar.GetContext(v951); end if ((v812 >= (v953 + v955)) and (v812 <= (v954 + v955))) then local v1085 = getglobal("BActionButton" .. (v812 - v955)); if v1085 then BActionButton.Update(v1085); end end end end); ClassicMacros.RegisterMouseOverResolver = function(v815) if (type(v815) == "function") then table.insert(v14, v815); end end; ClassicMacros.RegisterMouseOverResolver(function(v816) if (v816:GetName() and string.find(v816:GetName(), "^pf") and v816['label'] and v816['id']) then return v816['label'] .. v816['id']; end end); if ChatFrameEditBox['_AddHistoryLine'] then local v956; ChatFrameEditBox['_AddHistoryLine'] = ChatFrameEditBox['AddHistoryLine']; ChatFrameEditBox.AddHistoryLine = function(v1029, v1030) if (not v956 and v1030 and string.find(v1030, "^/run(.+)")) then return; end if (not v956 and string.find(v1030, "^/script(.+)")) then return; end if (not v956 and string.find(v1030, "^/cast(.+)")) then return; end ChatFrameEditBox._AddHistoryLine(v1029, v1030); end; local v960 = ChatFrameEditBox:GetScript("OnEnterPressed"); ChatFrameEditBox:SetScript("OnEnterPressed", function(v1031, v1032, v1033, v1034) v956 = true; v960(v1031, v1032, v1033, v1034); v956 = nil; end); end SLASH_FSTACK1 = "/fstack"; SlashCmdList['FSTACK'] = function(v817) StarsPrintFrameAndChild(GetMouseFocus()); end; local v145 = CreateFrame("Frame", "StarsResultFrame", UIParent, "OptionFrameBoxTemplate"); v145:SetWidth(800); v145:SetHeight(360); v145:SetPoint("CENTER", UIParent, "CENTER", 0, 0); v145:SetBackdropBorderColor(0.5, 0.5, 0.5); v145:SetBackdropColor(0, 0, 0, 0.9); v145:SetMovable(true); v145:EnableMouse(true); v145:RegisterForDrag("LeftButton"); v145:SetScript("OnMouseDown", function() this:StartMoving(); end); v145:SetScript("OnMouseUp", function() this:StopMovingOrSizing(); end); v145['Close'] = CreateFrame("Button", "", v145, "UIPanelButtonTemplate"); v145['Close']:SetWidth(50); v145['Close']:SetHeight(20); v145['Close']:SetText("关闭"); v145['Close']:SetPoint("BOTTOMRIGHT", v145, "BOTTOMRIGHT", -10, 10); v145['Close']:SetScript("OnClick", function() v145:Hide(); end); v145['Clear'] = CreateFrame("Button", "", v145, "UIPanelButtonTemplate"); v145['Clear']:SetWidth(50); v145['Clear']:SetHeight(20); v145['Clear']:SetText("清空"); v145['Clear']:SetPoint("RIGHT", v145.Close, "LEFT", -10, 0); v145['Clear']:SetScript("OnClick", function() v145['EditBox']:SetText(""); v145['EditBox']:ClearFocus(); end); v145['ScrollFrame'] = CreateFrame("ScrollFrame", "StarsResultFrame.ScrollFrame", v145, "UIPanelScrollFrameTemplate"); v145['ScrollFrame']:SetWidth(v145:GetWidth() - 52); v145['ScrollFrame']:SetHeight(v145:GetHeight() - 47); v145['ScrollFrame']:SetPoint("TOPLEFT", v145, "TOPLEFT", 15, -15); v145['Tips'] = v145:CreateFontString(nil, "ARTWORK", "GameFontNormal"); v145['Tips']:SetFont(STANDARD_TEXT_FONT, 13); v145['Tips']:SetPoint("TOPLEFT", v145.ScrollFrame, "BOTTOMLEFT", 0, -6); v145['Tips']:SetText("Tips:框体边缘可拖动；如上方编辑框内文字显示不全可Ctrl+A全选然后复制到游戏外的文本软件内查看最佳！"); v145['EditBox'] = CreateFrame("EditBox", "StarsResultFrame.EditBox", v145.ScrollFrame); v145['EditBox']:SetFontObject(ChatFontNormal); v145['EditBox']:SetWidth(v145['ScrollFrame']:GetWidth()); v145['EditBox']:SetMultiLine(true); v145['EditBox']:SetAutoFocus(false); v145['EditBox']:SetMaxLetters(100000); v145['ScrollFrame']:SetScrollChild(v145.EditBox); v145['EditBox']:SetScript("OnTextChanged", function() local v818 = getglobal(this:GetParent():GetName() .. "ScrollBar"); this:GetParent():UpdateScrollChildRect(); local v819, v820 = v818:GetMinMaxValues(); if ((v820 > 0) and (this['max'] ~= v820)) then this['max'] = v820; v818:SetValue(v820); end end); v145['EditBox']:SetScript("OnEscapePressed", function() this:ClearFocus(); end); v145:Hide(); function StarsPrintFrameAndChild(v821, v822, v823) v823 = v823 or 0; if (v823 > 3) then return; end if not v145:IsShown() then v145:Show(); end v822 = ((v822 == nil) and "") or v822; local v824 = v821:GetName(); v824 = ((v824 == nil) and "nil") or v824; v824 = v824 .. "  类型：" .. v821:GetObjectType(); if (v821:GetObjectType() == "Button") then v824 = v824 .. (((v821:GetText() == nil) and "") or ("  文本：" .. v821:GetText())); end v145['EditBox']:Insert("\n" .. v822 .. v824); v822 = (string.find(v822, "|") and v822) or ("|" .. v822); local v825 = {v821:GetRegions()}; for v961, v962 in pairs(v825) do local v963 = ((v962:GetName() == nil) and "nil") or v962:GetName(); local v964 = ((v962:GetObjectType() == nil) and "nil") or v962:GetObjectType(); local v965 = ""; if (v964 == "Texture") then v965 = ((v962:GetTexture() == nil) and "nil") or v962:GetTexture(); elseif ((v964 == "FontString") or (v964 == "Button")) then v965 = ((v962:GetText() == nil) and "nil") or v962:GetText(); end v145['EditBox']:Insert("\n" .. v822 .. "|---" .. v963 .. "  类型：" .. v964 .. (((v965 == "nil") and "") or ("  内容：" .. v965))); end local v826 = {v821:GetChildren()}; for v966, v967 in pairs(v826) do StarsPrintFrameAndChild(v967, v822 .. "|---", v823 + 1); end end 